package com.note.feng.leetcode.algorithms.easy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TwoHundredFortyTwo {

    /**
     * 242 有效的字母异位词
     * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
     *
     * 注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
     *
     * 示例 1:
     *
     * 输入: s = "anagram", t = "nagaram"
     * 输出: true
     * 示例 2:
     *
     * 输入: s = "rat", t = "car"
     * 输出: false
     *
     * 提示:
     *
     * 1 <= s.length, t.length <= 5 * 104
     * s 和 t 仅包含小写字母
     *
     * 进阶: 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/valid-anagram
     */
    /**
     *解法：遍历两个字符串，用list存储字符出现的次数，小标代表字母，值代表出现次数
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        List<Integer> list1 = new ArrayList<>(26);
        for (int i = 0; i < 26; i++) {
            list1.add(0);
        }
        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i) - 'a';
            list1.set(index, list1.get(index) + 1);
        }
        for (int i = 0; i < t.length(); i++) {
            int index = t.charAt(i) - 'a';
            list1.set(index, list1.get(index) - 1);
            if(list1.get(index) < 0){
                return false;
            }
        }
        return true;
    }
}
